#include <stdio.h>
#include <stdlib.h>

void main()
{
    int i = 0;
    char st[16], *p, *s;
    s = "we are here!"; // s指向存储字符串元素w的地址
    p = s;              // p的指向与s相同
    printf("p输出%s s输出%s\n", p, s);
    while (st[i] = *s++) // 为字符数组赋值结束时，s指向\0 i++;
        printf("st输出%s\n", st);
    printf("p输出%s s输出%s\n", p, s); // s指向\0，输出为空，但p指向w
    s = s - 10;                        // s指向a
    printf("p输出%s s输出%s\n", p, s); // s输出are here!
    system("pause");
}


/*
字符串常量存放在文字常量区。

不管是全局字符串常量，还是局部字符串常量，都由系统分配在文字常量区，这个区位于全局区。
局部字符串常量只是存储在文字常量区，并不像全局字符串那样可以共享。

不要混淆指针与指针所指向的数据。尽管赋值语句
    s= "we are here!";
使得打印语句输出s的值就是字符串"we arehere！"，
但却不能认为s的值就是这个字符串。
实际上，s的值是一个指向由'w'、'e'、''、'a'、…、'！'和'\0'等13个字符组成的字符数组的起始元素（即第1个元素w）的指针。


一定要记住：
    复制指针并不同时赋值指针所指向的数据。

一个字符串常量可以供几个指针使用，并且互不影响。
*/